package com.ruoyi.system.utils;

import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ReadTxtFiles {

    public static void main(String[] args) {
        // 指定目标文件夹路径
        String directoryPath = "path/to/your/directory";
        readTxtFiles(directoryPath);
    }

    public static void readTxtFiles(String directoryPath) {
        Path dir = Paths.get(directoryPath);

        try (Stream<Path> paths = Files.list(dir)) {
            // 1. 过滤出所有.txt文件
            List<String> allTextContents = paths
                    .filter(path -> isTxtFile(path)) // 过滤扩展名为.txt的文件
                    .flatMap(path -> readFileContent(path)) // 读取每个文件的内容
                    .collect(Collectors.toList()); // 收集所有内容到列表

            // 打印结果
            allTextContents.forEach(System.out::println);

        } catch (IOException e) {
            System.err.println("读取文件夹失败: " + e.getMessage());
        }
    }

    /**
    * @Description: 判断是否为.txt文件（不区分大小写）
    * @author: wangp
    * @date: 2025/3/31 13:47
    * @param path:
    * @Return: boolean
    */
    public static boolean isTxtFile(Path path) {
        String fileName = path.getFileName().toString();
        return fileName.toLowerCase().endsWith(".txt");
    }

    /**
    * @Description: 读取单个文件内容（返回内容流的Stream）
    * @author: wangp
    * @date: 2025/3/31 13:47
    * @param path:
    * @Return: java.util.stream.Stream<java.lang.String>
    */
    public static Stream<String> readFileContent(Path path) {
        try {
            // 使用UTF-8编码逐行读取文件内容
            return Files.lines(path, StandardCharsets.UTF_8);
        } catch (IOException e) {
            throw new UncheckedIOException("读取文件失败: " + path, e);
        }
    }
}
